

#include "Supermercado.h"

Supermercado::Supermercado() {
    //pasillos = new ListaDoble<Pasillo>();
    levantarListas();
    caja = new Caja();
}

void Supermercado::levantarListas()
{
    //Lista de Pasillos -------------------------
	AdminArchivos file("Pasillos.txt");
    pasillos = file.levantarListaPasillo();
    if(pasillos == NULL)
	{
		cout<<"No se pudo levantar la lista\n";
		cin.get();
		file.closeFile();
		exit(1);
	}
    
    //Lista de tipo de productos -------------------------
    AdminArchivos file2("TipoProductos.txt");
    pasillos->setActual(pasillos->getPrimero());
    int tipoAux = 2;
    while(pasillos->getActual() != NULL)
    {
        delete pasillos->getActual()->getInfo()->getListaCircular();
        pasillos->getActual()->getInfo()->setTipoProductos(file2.levantarListaTipoProducto(tipoAux));
        tipoAux = 5;
        if(pasillos->getActual()->getInfo()->getListaCircular() == NULL)
        {
            cout<<"No se pudo levantar la lista de tipo de productos\n";
            cin.get();
            file2.closeFile();
            exit(1);
        }
        
        pasillos->setActual(pasillos->getActual()->getSigNodo());
    }
	
    
}

void Supermercado::grabarListas()
{
    AdminArchivos file("Pasillos.txt");
	if(file.grabarListaPasillo(pasillos))
		cout<<"La lista de pasillos se ha grabado con exito\n";
    else
	{
		cout<<"No se pudo grabar la lista\n";
		cin.get();
		file.closeFile();
		exit(1);
	}
    file.closeFile();
    
    //tipoproducto
    AdminArchivos file2("TipoProductos.txt");
    int tipoAux = 1;
    pasillos->setActual(pasillos->getPrimero());
    while(pasillos->getActual() != NULL)
    {
        if(file2.grabarListaTipoProducto(pasillos->getActual()->getInfo()->getListaCircular(), tipoAux))
        {
            cout<<"La lista de tipo de productos se ha grabado con exito\n";
            file2.closeFile();
        }
        else
        {
            cout<<"No se pudo grabar la lista de tipos de productos\n";
            system("pause");
            file2.closeFile();
            exit(1);
        }
        tipoAux = 3;
        
        pasillos->setActual(pasillos->getActual()->getSigNodo());
    }
}

Supermercado::Supermercado(const Supermercado& orig) {
}

Supermercado::~Supermercado() {
    grabarListas();
    delete pasillos;
    delete caja;
}

string Supermercado::toString()
{
    stringstream s;
    s<<"\tSupermercado \n"<<pasillos->toString();
    return s.str();
}

int Supermercado::insertarPasillo(int pos, Pasillo *p)
{
    pasillos->insertarPos(pos, p);
    return 1;
}

void Supermercado::setCaja(Caja* caja) {
    this->caja = caja;
}

Caja* Supermercado::getCaja() const {
    return caja;
}

void Supermercado::setPasillos(ListaDoble<Pasillo>* pasillos) {
    this->pasillos = pasillos;
}

ListaDoble<Pasillo>* Supermercado::getPasillos() const {
    return pasillos;
}

Producto* Supermercado::popProductoDeCliente(string id){

Producto * product=NULL;
	pasillos->setActual(pasillos->getPrimero());
	for(int i=1;i<=pasillos->getCantidad();i++)
	{
		pasillos->getActual()->getInfo()->getListaCircular()->setActual(pasillos->getActual()->getInfo()->getListaCircular()->getPrimero());
		for(int i =1;i<=pasillos->getActual()->getInfo()->getListaCircular()->getCantidad();i++){
			product=pasillos->getActual()->getInfo()->getListaCircular()->getActual()->getInfo()->getLista()->buscar(id);
			if(product!=NULL){
				if(!(product->getProductos()->empty())){
				 product=product->getProductos()->pop();
                            
				}

				else
					product=pasillos->getActual()->getInfo()->getListaCircular()->getActual()->getInfo()->getLista()->getPrimero()->getInfo();
                       
                          
				       return product;




			}
			pasillos->getActual()->getInfo()->getListaCircular()->setActual(pasillos->getActual()->getInfo()->getListaCircular()->getActual()->getSigNodo());
	
		}
	
	
	pasillos->setActual(pasillos->getActual()->getSigNodo());
		
	}





return NULL;

	
}